/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package epul.bdav;

import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlID;
import javax.xml.bind.annotation.XmlIDREF;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author p0801698
 */
@Entity
public class Partie {
    public static class Auteur{
        
        Membre m;
    }
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PARTIE_GEN")
    @SequenceGenerator(name = "PARTIE_GEN", sequenceName = "livre_seq", allocationSize=1)
    @XmlAttribute
    private int id;
    
    @JoinColumn(name = "livre")
    @ManyToOne
    private Livre livre;

    @JoinColumn(name = "inclus_dans")
    @OneToOne
    private Partie inclus_dans;
    
    @Column(name = "titre")
    @XmlElement(name="titre")
    private String titre;

    @XmlElement(name="contenu")
    @Column(name = "contenu")
    private String contenu;


    @OneToMany(mappedBy = "partie")
    private Collection<Partie> sous_parties = new ArrayList<Partie>();

    @ManyToOne
     @XmlTransient 
    @JoinTable(
    name="Auteur_Partie",
    joinColumns=
        @JoinColumn(name="auteur", referencedColumnName="ID"),
    inverseJoinColumns=
        @JoinColumn(name="partie", referencedColumnName="ID")
    )
    private Collection<Membre> auteurs = new ArrayList<Membre>();

    @XmlTransient
    public String getContenu() {
        return contenu;
    }

    public void setContenu(String contenu) {
        this.contenu = contenu;
    }

    // Ajouté pour gérer les identifiants hors des ORMs
    public void setId(int id) {
        this.id = id;
    }
    
    @XmlTransient
    public int getId() {
        return id;
    }
    
    public Livre getLivre() {
        return livre;
    }

    public void setLivre(Livre livre) {
        this.livre = livre;
    }

    @XmlElement(name = "partie")
    public Collection<Partie> getSous_parties() {
        return sous_parties;
    }



    @XmlTransient 
    public String getTitre() {
        return titre;
    }

    public void setTitre(String titre) {
        this.titre = titre;
    }

    void addAuteur(Membre m) {
        this.auteurs.add(m);
    }

    void addPartie(Partie p) {


//        if(p.livre!=null)
//            p.livre.getParties().remove(p);
//
//        this.livre.addPartie(p);
        this.sous_parties.add(p);
    }


//    public Partie getInclus_dans() {
//        return inclus_dans;
//    }
//
//    public void setInclus_dans(Partie inclus_dans) {
//
//        if(this.inclus_dans!=null)
//            this.inclus_dans.getSous_parties().remove(this);
//
//        if(inclus_dans!=null)
//            inclus_dans.getSous_parties().add(this);
//
//        this.inclus_dans=inclus_dans;
//
//    }


}
